package com.inight.ojcodesandbox.security;

import java.security.Permission;

/**
 * 自己写一个安全管理器, 用于管理权限
 */
public class MySecurityManager extends SecurityManager{

    @Override
    public void checkPermission(Permission perm) {
        // 开启这个默认所有权限都没有
        // super.checkPermission(perm);

        System.out.println("检查权限: " + perm.getName());
    }

    /**
     * 检查程序是否允许可以执行
     * @param cmd   the specified system command.
     */
    @Override
    public void checkExec(String cmd) {
        // super.checkExec(cmd);
        throw new SecurityException("checkExec 执行命令异常: " + cmd);
    }

    /**
     * 检查程序是否允许读文件
     * @param file   the system-dependent file name.
     */
    @Override
    public void checkRead(String file) {
        // super.checkRead(file);
        System.out.println("读文件: " + file);
        // 设置白名单
        if(file.contains("xxx")) {
            System.out.println("读文件: " + file);
            return;
        }
        throw new SecurityException("checkExec 执行命令异常: " + file);
    }

    /**
     * 检查是否允许删除文件
     * @param file   the system-dependent filename.
     */
    @Override
    public void checkDelete(String file) {
        // super.checkDelete(file);
        throw new SecurityException("checkExec 执行命令异常: " + file);

    }


    /**
     * 检查是否允许写
     * @param file   the system-dependent filename.
     */
    @Override
    public void checkWrite(String file) {
        // super.checkWrite(file);
        throw new SecurityException("checkExec 执行命令异常: " + file);

    }

    /**
     * 检查是否允许网络连接
     * @param host   the host name port to connect to.
     * @param port   the protocol port to connect to.
     */
    @Override
    public void checkConnect(String host, int port) {
        // super.checkConnect(host, port);
        throw new SecurityException("checkExec 执行命令异常: " + host + ":" + port);
    }
}
